【图论 |
您所在的位置:网站首页 › 拓扑排序 队列是什么 › 【图论 |
ฅ(๑˙o˙๑)ฅ 大家好, 欢迎大家光临我的博客:面向阿尼亚学习 算法学习笔记系列持续更新中~ 拓扑排序(Topological Sorting) 若一个由图中所有点构成的序列 A 满足:对于图中的每条边 (x,y),x 在 A 中都出现在 y 之前,则称 A 是该图的一个拓扑序列。 且该序列必须满足下面两个条件: 每个顶点出现且只出现一次。若存在一条从顶点 x到顶点 y的路径,那么在序列中顶点 x 出现在顶点 y的前面。拓扑排序只适用于 AOV网 (有向无环图) 若图中有环,则一定不存在拓扑序。 可以证明,一个有向无环图,一定存在一个拓扑序列。有向无环图,又被称为拓扑图。 入度: 即有多少条边指向自己这个节点。 出度: 即有多少条边从自己这个节点指出去。 二、算法流程算法流程: 用队列来执行 ,初始化所有入度为0的顶点入队。 主要由以下两步循环执行,直到不存在入度为 0 的顶点为止 选择一个入度为 0 的顶点,并将它输出; 删除图中从顶点连出的所有边。 循环结束, 若输出的顶点数小于图中的顶点数,则表示该图存在回路,即无法拓扑排序, 否则,输出的就是拓扑序列 (不唯一) 模板如下: 1.数组模拟队列实现拓扑排序 bool topsort() { int hh = 0, tt = -1; // in[i] 存储点i的入度 for (int i = 1; i a >> b; add(a,b); in[b] ++;// a -> b , b的入度++ } if(topsort() == 0) cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |